\hypertarget{class_tank_drive_subsystem}{\section{Tank\-Drive\-Subsystem Class Reference}
\label{class_tank_drive_subsystem}\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}}
}


{\ttfamily \#include $<$Tank\-Drive\-Subsystem.\-hpp$>$}

Inheritance diagram for Tank\-Drive\-Subsystem\-:\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[height=5.000000cm]{class_tank_drive_subsystem}
\end{center}
\end{figure}
\subsection*{Classes}
\begin{DoxyCompactItemize}
\item 
class \hyperlink{class_tank_drive_subsystem_1_1_dead_zone_modifier}{Dead\-Zone\-Modifier}
\item 
struct \hyperlink{struct_tank_drive_subsystem_1_1_motor_position}{Motor\-Position}
\item 
class \hyperlink{class_tank_drive_subsystem_1_1_reverse_modifier}{Reverse\-Modifier}
\item 
class \hyperlink{class_tank_drive_subsystem_1_1_scale_modifier}{Scale\-Modifier}
\end{DoxyCompactItemize}
\subsection*{Public Types}
\begin{DoxyCompactItemize}
\item 
enum {\bfseries Side} \{ {\bfseries Left} = 1, 
{\bfseries Right} = 2
 \}
\end{DoxyCompactItemize}
\subsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\hypertarget{class_tank_drive_subsystem_a7db0765d419412cfd3941da6456b1cd2}{{\bfseries Tank\-Drive\-Subsystem} (U\-I\-N\-T32 left\-Front\-Motor\-Channel, U\-I\-N\-T32 left\-Back\-Motor\-Channel, U\-I\-N\-T32 right\-Front\-Motor\-Channel, U\-I\-N\-T32 right\-Back\-Motor\-Channel)}\label{class_tank_drive_subsystem_a7db0765d419412cfd3941da6456b1cd2}

\item 
\hyperlink{class_tank_drive_subsystem_a5b6d5ba2bca1b2d218375fdf93e830e8}{Tank\-Drive\-Subsystem} (U\-I\-N\-T32 left\-Motor\-Channel, U\-I\-N\-T32 right\-Motor\-Channel)
\item 
\hyperlink{class_tank_drive_subsystem_a81b7920209221386d07f820d618ab530}{Tank\-Drive\-Subsystem} (boost\-::shared\-\_\-ptr$<$ \hyperlink{class_pid_motor_controller}{Pid\-Motor\-Controller} $>$ left\-Front\-Motor, boost\-::shared\-\_\-ptr$<$ \hyperlink{class_pid_motor_controller}{Pid\-Motor\-Controller} $>$ left\-Back\-Motor, boost\-::shared\-\_\-ptr$<$ \hyperlink{class_pid_motor_controller}{Pid\-Motor\-Controller} $>$ right\-Front\-Motor, boost\-::shared\-\_\-ptr$<$ \hyperlink{class_pid_motor_controller}{Pid\-Motor\-Controller} $>$ right\-Back\-Motor)
\item 
\hyperlink{class_tank_drive_subsystem_a0f732a270a4549fbf76bd34d5cf05844}{Tank\-Drive\-Subsystem} (boost\-::shared\-\_\-ptr$<$ \hyperlink{class_pid_motor_controller}{Pid\-Motor\-Controller} $>$ left\-Motor, boost\-::shared\-\_\-ptr$<$ \hyperlink{class_pid_motor_controller}{Pid\-Motor\-Controller} $>$ right\-Motor)
\item 
\hyperlink{class_tank_drive_subsystem_a56aef73731d1e82d080f1b375795a56f}{Tank\-Drive\-Subsystem} (\hyperlink{class_pid_motor_controller}{Pid\-Motor\-Controller} $\ast$left\-Front\-Motor, \hyperlink{class_pid_motor_controller}{Pid\-Motor\-Controller} $\ast$left\-Back\-Motor, \hyperlink{class_pid_motor_controller}{Pid\-Motor\-Controller} $\ast$right\-Front\-Motor, \hyperlink{class_pid_motor_controller}{Pid\-Motor\-Controller} $\ast$right\-Back\-Motor, bool can\-Delete\-Motors=false)
\item 
\hyperlink{class_tank_drive_subsystem_abb2775f62d564eeec0c54ae20d710ff7}{Tank\-Drive\-Subsystem} (\hyperlink{class_pid_motor_controller}{Pid\-Motor\-Controller} $\ast$left\-Motor, \hyperlink{class_pid_motor_controller}{Pid\-Motor\-Controller} $\ast$right\-Motor, bool can\-Delete\-Motors=false)
\item 
\hyperlink{class_tank_drive_subsystem_a0ddd4cc09db581614f99bfc720dd2eb9}{Tank\-Drive\-Subsystem} (\hyperlink{class_pid_motor_controller}{Pid\-Motor\-Controller} \&left\-Front\-Motor, \hyperlink{class_pid_motor_controller}{Pid\-Motor\-Controller} \&left\-Back\-Motor, \hyperlink{class_pid_motor_controller}{Pid\-Motor\-Controller} \&right\-Front\-Motor, \hyperlink{class_pid_motor_controller}{Pid\-Motor\-Controller} \&right\-Back\-Motor)
\item 
\hyperlink{class_tank_drive_subsystem_a8bb3ac4ae73bfcb77bdacb31052b9d09}{Tank\-Drive\-Subsystem} (\hyperlink{class_pid_motor_controller}{Pid\-Motor\-Controller} \&left\-Motor, \hyperlink{class_pid_motor_controller}{Pid\-Motor\-Controller} \&right\-Motor)
\item 
\hyperlink{class_tank_drive_subsystem_a7a5ed0dc2d14b7d96e1c827c3a536eba}{Tank\-Drive\-Subsystem} (boost\-::shared\-\_\-ptr$<$ C\-A\-N\-Jaguar $>$ left\-Front\-Motor, boost\-::shared\-\_\-ptr$<$ C\-A\-N\-Jaguar $>$ left\-Back\-Motor, boost\-::shared\-\_\-ptr$<$ C\-A\-N\-Jaguar $>$ right\-Front\-Motor, boost\-::shared\-\_\-ptr$<$ C\-A\-N\-Jaguar $>$ right\-Back\-Motor)
\item 
\hyperlink{class_tank_drive_subsystem_a05a431f8f439f308e4676c14411c70cf}{Tank\-Drive\-Subsystem} (boost\-::shared\-\_\-ptr$<$ C\-A\-N\-Jaguar $>$ left\-Motor, boost\-::shared\-\_\-ptr$<$ C\-A\-N\-Jaguar $>$ right\-Motor)
\item 
\hyperlink{class_tank_drive_subsystem_aaed15564e6d60c0a4133770a5c1d098d}{Tank\-Drive\-Subsystem} (C\-A\-N\-Jaguar $\ast$left\-Front\-Motor, C\-A\-N\-Jaguar $\ast$left\-Back\-Motor, C\-A\-N\-Jaguar $\ast$right\-Front\-Motor, C\-A\-N\-Jaguar $\ast$right\-Back\-Motor, bool can\-Delete\-Motors=false)
\item 
\hyperlink{class_tank_drive_subsystem_a01f7150cf6fd4cda290ff33f7bf166fc}{Tank\-Drive\-Subsystem} (C\-A\-N\-Jaguar $\ast$left\-Motor, C\-A\-N\-Jaguar $\ast$right\-Motor, bool can\-Delete\-Motors=false)
\item 
\hyperlink{class_tank_drive_subsystem_a8da4ddd63d560f180b6b9ce19dc9de0a}{Tank\-Drive\-Subsystem} (C\-A\-N\-Jaguar \&left\-Front\-Motor, C\-A\-N\-Jaguar \&left\-Back\-Motor, C\-A\-N\-Jaguar \&right\-Front\-Motor, C\-A\-N\-Jaguar \&right\-Back\-Motor)
\item 
\hyperlink{class_tank_drive_subsystem_a83ecf54aca8c30faa273c8a73988448c}{Tank\-Drive\-Subsystem} (C\-A\-N\-Jaguar \&left\-Motor, C\-A\-N\-Jaguar \&right\-Motor)
\item 
\hyperlink{class_tank_drive_subsystem_a8ee157d37267ce8b992f3adc18d4cade}{Tank\-Drive\-Subsystem} (Speed\-Controller $\ast$left\-Front\-Motor, Speed\-Controller $\ast$left\-Back\-Motor, Speed\-Controller $\ast$right\-Front\-Motor, Speed\-Controller $\ast$right\-Back\-Motor)
\item 
\hyperlink{class_tank_drive_subsystem_a899218d5e877cd66b0f9e5c31e97489f}{Tank\-Drive\-Subsystem} (Speed\-Controller $\ast$left\-Motor, Speed\-Controller $\ast$right\-Motor)
\item 
\hyperlink{class_tank_drive_subsystem_af44e553b72f8a2a01fda4e4d561f9a29}{Tank\-Drive\-Subsystem} (Speed\-Controller \&left\-Front\-Motor, Speed\-Controller \&left\-Back\-Motor, Speed\-Controller \&right\-Front\-Motor, Speed\-Controller \&right\-Back\-Motor)
\item 
\hyperlink{class_tank_drive_subsystem_a61913b7960d71dc73e2887db34bb989f}{Tank\-Drive\-Subsystem} (Speed\-Controller \&left\-Motor, Speed\-Controller \&right\-Motor)
\item 
U\-I\-N\-T32 \hyperlink{class_tank_drive_subsystem_ad2031041d42501363b411ed3a5ac147d}{Get\-Motor\-Rank\-Count} () const 
\item 
U\-I\-N\-T32 \hyperlink{class_tank_drive_subsystem_ad4a6c1ac368b96b68c9facc346f04591}{Get\-Motor\-Count} () const 
\item 
void \hyperlink{class_tank_drive_subsystem_a8fd73ce2cc0f6dbb18d1e3a37c34dfde}{Drive\-By\-Tank} (double left\-Value, double right\-Value)
\item 
void \hyperlink{class_tank_drive_subsystem_a48329a9c1073f0a59190648b56404918}{Drive\-By\-Magnitude\-And\-Curve} (double magnitude, double curve)
\item 
\hypertarget{class_tank_drive_subsystem_a25726afb4e9ae5b469578be4c8caa0bf}{boost\-::shared\-\_\-ptr$<$ \hyperlink{class_operation}{Operation}\\*
$<$ bool $>$ $>$ {\bfseries Drive\-Distance\-By\-Tank} (\hyperlink{struct_tank_value}{Tank\-Value} value, double threshold)}\label{class_tank_drive_subsystem_a25726afb4e9ae5b469578be4c8caa0bf}

\item 
\hypertarget{class_tank_drive_subsystem_ad78c027a2db0d8c8d9f0841a039c386c}{boost\-::shared\-\_\-ptr$<$ \hyperlink{class_operation}{Operation}\\*
$<$ bool $>$ $>$ {\bfseries Drive\-Distance\-By\-Tank} (\hyperlink{struct_tank_value}{Tank\-Value} value)}\label{class_tank_drive_subsystem_ad78c027a2db0d8c8d9f0841a039c386c}

\item 
\hypertarget{class_tank_drive_subsystem_ad16802c72b67097953da676a521fcde2}{boost\-::shared\-\_\-ptr$<$ \hyperlink{class_operation}{Operation}\\*
$<$ bool $>$ $>$ {\bfseries Drive\-Distance\-By\-Tank} (double left, double right, double threshold)}\label{class_tank_drive_subsystem_ad16802c72b67097953da676a521fcde2}

\item 
\hypertarget{class_tank_drive_subsystem_a4e7c0fe3d48337b3d618c1da80cf71cf}{boost\-::shared\-\_\-ptr$<$ \hyperlink{class_operation}{Operation}\\*
$<$ bool $>$ $>$ {\bfseries Drive\-Distance\-By\-Tank} (double left, double right)}\label{class_tank_drive_subsystem_a4e7c0fe3d48337b3d618c1da80cf71cf}

\item 
void \hyperlink{class_tank_drive_subsystem_a036170bbfff7c4c27fd6402bd55d3350}{Set\-Control\-Mode} (\hyperlink{class_drive_subsystem_adbbe91a7fd62cf12702601070d50b6eb}{Control\-Mode} control\-Mode)
\item 
\hyperlink{class_drive_subsystem_adbbe91a7fd62cf12702601070d50b6eb}{Control\-Mode} \hyperlink{class_tank_drive_subsystem_a373a676d75a14362bc31fe3d4a17c8a1}{Get\-Control\-Mode} ()
\item 
\hypertarget{class_tank_drive_subsystem_a0f95f6808ce9d475176e67a5c89ce407}{void {\bfseries Set\-Neutral\-Mode} (\hyperlink{class_drive_subsystem_ace82b46d96fe6a96f39a564e303de261}{Neutral\-Mode} neutral\-Mode)}\label{class_tank_drive_subsystem_a0f95f6808ce9d475176e67a5c89ce407}

\item 
bool \hyperlink{class_tank_drive_subsystem_af2b671ced4e49909c19d13eaebf98b90}{Get\-Motor\-Invertation} (\hyperlink{struct_tank_drive_subsystem_1_1_motor_position}{Motor\-Position} motor\-Position) const 
\item 
void \hyperlink{class_tank_drive_subsystem_a47d76a87016c06faa71a326c0c644ff5}{Set\-Motor\-Invertations} (bool left\-Front\-Is\-Inverted, bool left\-Back\-Is\-Inverted, bool right\-Front\-Is\-Inverted, bool right\-Back\-Is\-Inverted)
\item 
void \hyperlink{class_tank_drive_subsystem_ac594f9e16f238b40d7d855f895d9bcae}{Set\-Motor\-Invertations} (bool left\-Is\-Inverted, bool right\-Is\-Inverted)
\item 
void \hyperlink{class_tank_drive_subsystem_a371ce69e5f9260fc53f30f582e41d2cf}{Set\-Motor\-Invertation} (\hyperlink{struct_tank_drive_subsystem_1_1_motor_position}{Motor\-Position} motor\-Position, bool is\-Inverted)
\item 
\hypertarget{class_tank_drive_subsystem_a52ffae710dd29404babfba5456749fee}{void {\bfseries Set\-Motor\-Invertation} (Side side, U\-I\-N\-T32 rank, bool is\-Inverted)}\label{class_tank_drive_subsystem_a52ffae710dd29404babfba5456749fee}

\item 
void \hyperlink{class_tank_drive_subsystem_aa9dd8286531be9c8aebd74bf20effea5}{Set\-Encoders\-Codes\-Per\-Revolution} (U\-I\-N\-T16 codes\-Per\-Revolution)
\item 
void \hyperlink{class_tank_drive_subsystem_ab4f06a60c711464a175f1d82a828b13b}{Set\-Encoders\-Codes\-Per\-Revolution} (U\-I\-N\-T16 left\-Front\-Codes\-Per\-Revolution, U\-I\-N\-T16 left\-Back\-Codes\-Per\-Revolution, U\-I\-N\-T16 right\-Front\-Codes\-Per\-Revolution, U\-I\-N\-T16 right\-Back\-Codes\-Per\-Revolution)
\item 
void \hyperlink{class_tank_drive_subsystem_a5148286a13682a83196a1b725361639e}{Set\-Encoder\-Codes\-Per\-Revolution} (\hyperlink{struct_tank_drive_subsystem_1_1_motor_position}{Motor\-Position} motor\-Position, U\-I\-N\-T16 codes\-Per\-Revolution)
\item 
\hypertarget{class_tank_drive_subsystem_aff629d559d7caa9b0d09e7297de4c7ca}{void {\bfseries Set\-Encoder\-Codes\-Per\-Revolution} (Side side, U\-I\-N\-T32 rank, U\-I\-N\-T16 codes\-Per\-Revolution)}\label{class_tank_drive_subsystem_aff629d559d7caa9b0d09e7297de4c7ca}

\item 
void \hyperlink{class_tank_drive_subsystem_a0e963323135db309d6584387ad5387a8}{Set\-P\-I\-Ds} (\hyperlink{class_drive_subsystem_adbbe91a7fd62cf12702601070d50b6eb}{Control\-Mode} control\-Mode, double p, double i, double d)
\item 
void \hyperlink{class_tank_drive_subsystem_ade9984aff56419959bec12bcaca45de5}{Set\-P\-I\-D} (\hyperlink{class_drive_subsystem_adbbe91a7fd62cf12702601070d50b6eb}{Control\-Mode} control\-Mode, \hyperlink{struct_tank_drive_subsystem_1_1_motor_position}{Motor\-Position} motor\-Position, double p, double i, double d)
\item 
\hypertarget{class_tank_drive_subsystem_a025e857f24a83936ae0a5a65f5b4afde}{void {\bfseries Set\-Maximum\-Speed} (double maximum\-Speed)}\label{class_tank_drive_subsystem_a025e857f24a83936ae0a5a65f5b4afde}

\item 
\hypertarget{class_tank_drive_subsystem_a99eb3cb1032956d57cc5fd36879d9f1b}{void {\bfseries Set\-Maximum\-Voltage} (double maximum\-Voltage)}\label{class_tank_drive_subsystem_a99eb3cb1032956d57cc5fd36879d9f1b}

\item 
\hypertarget{class_tank_drive_subsystem_aefd514a3cab9e0a2754506230bc12aff}{void {\bfseries Set\-Maximum\-Current} (double maximum\-Current)}\label{class_tank_drive_subsystem_aefd514a3cab9e0a2754506230bc12aff}

\item 
\hypertarget{class_tank_drive_subsystem_aa1d533c0ce470526e410191e660aef19}{double {\bfseries Get\-Distance\-Threshold} ()}\label{class_tank_drive_subsystem_aa1d533c0ce470526e410191e660aef19}

\item 
\hypertarget{class_tank_drive_subsystem_ad705027e309a9ec03e3232de113701bb}{void {\bfseries Set\-Distance\-Threshold} (double distance\-Threshold)}\label{class_tank_drive_subsystem_ad705027e309a9ec03e3232de113701bb}

\item 
\hypertarget{class_tank_drive_subsystem_a46e5755072a88745e4a48f553c8f9b92}{double {\bfseries Get\-Expiration} ()}\label{class_tank_drive_subsystem_a46e5755072a88745e4a48f553c8f9b92}

\item 
\hypertarget{class_tank_drive_subsystem_a6dce816dfcf05c862990907655de550c}{void {\bfseries Set\-Expiration} (double expiration)}\label{class_tank_drive_subsystem_a6dce816dfcf05c862990907655de550c}

\end{DoxyCompactItemize}
\subsection*{Static Public Member Functions}
\begin{DoxyCompactItemize}
\item 
static \hyperlink{struct_tank_value}{Tank\-Value} \hyperlink{class_tank_drive_subsystem_a94519a782cffefc8d72482c353508586}{Tank\-Drive\-Fetch\-Value} (Generic\-H\-I\-D \&left\-Joystick, Generic\-H\-I\-D \&right\-Joystick)
\item 
\hypertarget{class_tank_drive_subsystem_ab0c143fa1b7760d8c20d2a463edb9c47}{static \hyperlink{struct_tank_value}{Tank\-Value} {\bfseries Arcade\-Drive\-Fetch\-Value} (Generic\-H\-I\-D \&joystick)}\label{class_tank_drive_subsystem_ab0c143fa1b7760d8c20d2a463edb9c47}

\item 
\hypertarget{class_tank_drive_subsystem_aa833b59ef3034aa55366d2187a5fc1f2}{static void {\bfseries Drive\-By\-Tank} (\hyperlink{class_tank_drive_subsystem}{Tank\-Drive\-Subsystem} \&drive, const \hyperlink{struct_tank_value}{Tank\-Value} \&value)}\label{class_tank_drive_subsystem_aa833b59ef3034aa55366d2187a5fc1f2}

\end{DoxyCompactItemize}
\subsection*{Protected Types}
\begin{DoxyCompactItemize}
\item 
\hypertarget{class_tank_drive_subsystem_a3368f9a0421f48f0591f2966920ed053}{typedef std\-::map\\*
$<$ \hyperlink{struct_tank_drive_subsystem_1_1_motor_position}{Motor\-Position}, \\*
boost\-::shared\-\_\-ptr\\*
$<$ \hyperlink{class_pid_motor_controller}{Pid\-Motor\-Controller} $>$\\*
 $>$\-::iterator {\bfseries Motor\-Iterator}}\label{class_tank_drive_subsystem_a3368f9a0421f48f0591f2966920ed053}

\end{DoxyCompactItemize}
\subsection*{Protected Member Functions}
\begin{DoxyCompactItemize}
\item 
virtual void \hyperlink{class_tank_drive_subsystem_ab834b550c5bc2aa5ea164201287a3ebf}{Handle\-Periodic} ()
\item 
virtual void \hyperlink{class_tank_drive_subsystem_ae91788bb584fba841a4322e4ab533303}{Handle\-Awake} ()
\item 
virtual void \hyperlink{class_tank_drive_subsystem_a55532e7537d8f4aa680499fd84483ab7}{Handle\-Stop} ()
\item 
void \hyperlink{class_tank_drive_subsystem_ae234f352cd4dd1b4f2c1f1fc47f1c3bf}{Set\-Maximum\-Output} (double maximum\-Output)
\item 
\hypertarget{class_tank_drive_subsystem_aaf9576e209afc2fc1042b9b170972e27}{double {\bfseries Get\-Motor\-Invertation\-Multiplier} (\hyperlink{struct_tank_drive_subsystem_1_1_motor_position}{Motor\-Position} position) const }\label{class_tank_drive_subsystem_aaf9576e209afc2fc1042b9b170972e27}

\item 
\hypertarget{class_tank_drive_subsystem_aeab931949359292f9b06476dab6f2ae0}{double {\bfseries Get\-Motor\-Invertation\-Multiplier} (Side side, U\-I\-N\-T32 rank) const }\label{class_tank_drive_subsystem_aeab931949359292f9b06476dab6f2ae0}

\item 
\hypertarget{class_tank_drive_subsystem_af293b2765949bae732c291d9917cba5d}{\hyperlink{class_pid_motor_controller}{Pid\-Motor\-Controller} \& {\bfseries Get\-Pid\-Motor\-Controller} (\hyperlink{struct_tank_drive_subsystem_1_1_motor_position}{Motor\-Position} position)}\label{class_tank_drive_subsystem_af293b2765949bae732c291d9917cba5d}

\item 
\hypertarget{class_tank_drive_subsystem_a0f0c1eea6813be76bff850458e7a1030}{\hyperlink{class_pid_motor_controller}{Pid\-Motor\-Controller} \& {\bfseries Get\-Pid\-Motor\-Controller} (Side side, U\-I\-N\-T32 rank)}\label{class_tank_drive_subsystem_a0f0c1eea6813be76bff850458e7a1030}

\item 
\hypertarget{class_tank_drive_subsystem_af77f54084d35a50e67a15f65e7f74844}{void {\bfseries Feed\-Safety} ()}\label{class_tank_drive_subsystem_af77f54084d35a50e67a15f65e7f74844}

\end{DoxyCompactItemize}
\subsection*{Static Protected Member Functions}
\begin{DoxyCompactItemize}
\item 
\hypertarget{class_tank_drive_subsystem_a680be1c1da58fac297d7807f417c8461}{static double {\bfseries Get\-Motor\-Invertation\-Multiplier} (bool is\-Inverted)}\label{class_tank_drive_subsystem_a680be1c1da58fac297d7807f417c8461}

\end{DoxyCompactItemize}
\subsection*{Protected Attributes}
\begin{DoxyCompactItemize}
\item 
\hypertarget{class_tank_drive_subsystem_a1c86ec2ec6209aa01da16e0d445d716e}{bool {\bfseries m\-\_\-reversed}}\label{class_tank_drive_subsystem_a1c86ec2ec6209aa01da16e0d445d716e}

\item 
\hypertarget{class_tank_drive_subsystem_a409a9c55cc725a66a18c474d8a7874fb}{bool {\bfseries m\-\_\-owns\-Drive}}\label{class_tank_drive_subsystem_a409a9c55cc725a66a18c474d8a7874fb}

\item 
\hypertarget{class_tank_drive_subsystem_acce76ca08bbfaea81c0df9a616223d42}{double {\bfseries m\-\_\-max\-Output}}\label{class_tank_drive_subsystem_acce76ca08bbfaea81c0df9a616223d42}

\item 
\hypertarget{class_tank_drive_subsystem_a0098dbfb373a68b7932479b917ea0ef3}{double {\bfseries m\-\_\-max\-Speed}}\label{class_tank_drive_subsystem_a0098dbfb373a68b7932479b917ea0ef3}

\item 
\hypertarget{class_tank_drive_subsystem_a90ef71e1847b6f2293050967606d5485}{double {\bfseries m\-\_\-max\-Voltage}}\label{class_tank_drive_subsystem_a90ef71e1847b6f2293050967606d5485}

\item 
\hypertarget{class_tank_drive_subsystem_a83d35c0778ee8914406ef7320a90c2d4}{double {\bfseries m\-\_\-max\-Current}}\label{class_tank_drive_subsystem_a83d35c0778ee8914406ef7320a90c2d4}

\item 
\hypertarget{class_tank_drive_subsystem_a9edaa280dec6e8518e27342a642d075e}{bool {\bfseries m\-\_\-uses\-Pid\-Encoder\-Motors}}\label{class_tank_drive_subsystem_a9edaa280dec6e8518e27342a642d075e}

\item 
\hypertarget{class_tank_drive_subsystem_a8508696c74382cfdb5f7924fde181038}{\hyperlink{class_drive_subsystem_adbbe91a7fd62cf12702601070d50b6eb}{Control\-Mode} {\bfseries m\-\_\-control\-Mode}}\label{class_tank_drive_subsystem_a8508696c74382cfdb5f7924fde181038}

\item 
\hypertarget{class_tank_drive_subsystem_a0e2accc1e0579c056f0cbcb2ce77e0a9}{int {\bfseries m\-\_\-counter\-Periods}}\label{class_tank_drive_subsystem_a0e2accc1e0579c056f0cbcb2ce77e0a9}

\item 
\hypertarget{class_tank_drive_subsystem_ae0679843421c5031ac329c5d003c89f3}{Motor\-Iterator {\bfseries m\-\_\-motor\-Canidate\-For\-Check}}\label{class_tank_drive_subsystem_ae0679843421c5031ac329c5d003c89f3}

\item 
\hypertarget{class_tank_drive_subsystem_a7f92ae3b916b3dd0b307bc8a21253e28}{bool {\bfseries m\-\_\-drive\-Updated}}\label{class_tank_drive_subsystem_a7f92ae3b916b3dd0b307bc8a21253e28}

\item 
\hypertarget{class_tank_drive_subsystem_a2a1f89985772e91fec17e6a0e82d1c68}{Motor\-Safety\-Helper $\ast$ {\bfseries m\-\_\-safety\-Helper}}\label{class_tank_drive_subsystem_a2a1f89985772e91fec17e6a0e82d1c68}

\end{DoxyCompactItemize}
\subsection*{Friends}
\begin{DoxyCompactItemize}
\item 
\hypertarget{class_tank_drive_subsystem_afd6dc1464219badacb2dabab8c98eb2a}{class {\bfseries Mecanum\-Drive\-Subsystem}}\label{class_tank_drive_subsystem_afd6dc1464219badacb2dabab8c98eb2a}

\end{DoxyCompactItemize}


\subsection{Detailed Description}
The Four\-Motor\-Tank\-Drive\-Subsystem class is a base class for all four motor drive subsystems. 

\subsection{Constructor \& Destructor Documentation}
\hypertarget{class_tank_drive_subsystem_a5b6d5ba2bca1b2d218375fdf93e830e8}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}}
\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Tank\-Drive\-Subsystem}]{\setlength{\rightskip}{0pt plus 5cm}Tank\-Drive\-Subsystem\-::\-Tank\-Drive\-Subsystem (
\begin{DoxyParamCaption}
\item[{U\-I\-N\-T32}]{left\-Motor\-Channel, }
\item[{U\-I\-N\-T32}]{right\-Motor\-Channel}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_a5b6d5ba2bca1b2d218375fdf93e830e8}
Constructs a \hyperlink{class_tank_drive_subsystem}{Tank\-Drive\-Subsystem} with two motors. \hypertarget{class_tank_drive_subsystem_a81b7920209221386d07f820d618ab530}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}}
\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Tank\-Drive\-Subsystem}]{\setlength{\rightskip}{0pt plus 5cm}Tank\-Drive\-Subsystem\-::\-Tank\-Drive\-Subsystem (
\begin{DoxyParamCaption}
\item[{boost\-::shared\-\_\-ptr$<$ {\bf Pid\-Motor\-Controller} $>$}]{left\-Front\-Motor, }
\item[{boost\-::shared\-\_\-ptr$<$ {\bf Pid\-Motor\-Controller} $>$}]{left\-Back\-Motor, }
\item[{boost\-::shared\-\_\-ptr$<$ {\bf Pid\-Motor\-Controller} $>$}]{right\-Front\-Motor, }
\item[{boost\-::shared\-\_\-ptr$<$ {\bf Pid\-Motor\-Controller} $>$}]{right\-Back\-Motor}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_a81b7920209221386d07f820d618ab530}
Constructs a \hyperlink{class_tank_drive_subsystem}{Tank\-Drive\-Subsystem} with four Pid\-Encoder\-Motor\-Controllers. \hypertarget{class_tank_drive_subsystem_a0f732a270a4549fbf76bd34d5cf05844}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}}
\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Tank\-Drive\-Subsystem}]{\setlength{\rightskip}{0pt plus 5cm}Tank\-Drive\-Subsystem\-::\-Tank\-Drive\-Subsystem (
\begin{DoxyParamCaption}
\item[{boost\-::shared\-\_\-ptr$<$ {\bf Pid\-Motor\-Controller} $>$}]{left\-Motor, }
\item[{boost\-::shared\-\_\-ptr$<$ {\bf Pid\-Motor\-Controller} $>$}]{right\-Motor}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_a0f732a270a4549fbf76bd34d5cf05844}
Constructs a \hyperlink{class_tank_drive_subsystem}{Tank\-Drive\-Subsystem} with two Pid\-Encoder\-Motor\-Controllers. \hypertarget{class_tank_drive_subsystem_a56aef73731d1e82d080f1b375795a56f}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}}
\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Tank\-Drive\-Subsystem}]{\setlength{\rightskip}{0pt plus 5cm}Tank\-Drive\-Subsystem\-::\-Tank\-Drive\-Subsystem (
\begin{DoxyParamCaption}
\item[{{\bf Pid\-Motor\-Controller} $\ast$}]{left\-Front\-Motor, }
\item[{{\bf Pid\-Motor\-Controller} $\ast$}]{left\-Back\-Motor, }
\item[{{\bf Pid\-Motor\-Controller} $\ast$}]{right\-Front\-Motor, }
\item[{{\bf Pid\-Motor\-Controller} $\ast$}]{right\-Back\-Motor, }
\item[{bool}]{can\-Delete\-Motors = {\ttfamily false}}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_a56aef73731d1e82d080f1b375795a56f}
Constructs a \hyperlink{class_tank_drive_subsystem}{Tank\-Drive\-Subsystem} with four Pid\-Encoder\-Motor\-Controllers. \hypertarget{class_tank_drive_subsystem_abb2775f62d564eeec0c54ae20d710ff7}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}}
\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Tank\-Drive\-Subsystem}]{\setlength{\rightskip}{0pt plus 5cm}Tank\-Drive\-Subsystem\-::\-Tank\-Drive\-Subsystem (
\begin{DoxyParamCaption}
\item[{{\bf Pid\-Motor\-Controller} $\ast$}]{left\-Motor, }
\item[{{\bf Pid\-Motor\-Controller} $\ast$}]{right\-Motor, }
\item[{bool}]{can\-Delete\-Motors = {\ttfamily false}}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_abb2775f62d564eeec0c54ae20d710ff7}
Constructs a \hyperlink{class_tank_drive_subsystem}{Tank\-Drive\-Subsystem} with two Pid\-Encoder\-Motor\-Controllers. \hypertarget{class_tank_drive_subsystem_a0ddd4cc09db581614f99bfc720dd2eb9}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}}
\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Tank\-Drive\-Subsystem}]{\setlength{\rightskip}{0pt plus 5cm}Tank\-Drive\-Subsystem\-::\-Tank\-Drive\-Subsystem (
\begin{DoxyParamCaption}
\item[{{\bf Pid\-Motor\-Controller} \&}]{left\-Front\-Motor, }
\item[{{\bf Pid\-Motor\-Controller} \&}]{left\-Back\-Motor, }
\item[{{\bf Pid\-Motor\-Controller} \&}]{right\-Front\-Motor, }
\item[{{\bf Pid\-Motor\-Controller} \&}]{right\-Back\-Motor}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_a0ddd4cc09db581614f99bfc720dd2eb9}
Constructs a \hyperlink{class_tank_drive_subsystem}{Tank\-Drive\-Subsystem} with four Pid\-Encoder\-Motor\-Controllers. \hypertarget{class_tank_drive_subsystem_a8bb3ac4ae73bfcb77bdacb31052b9d09}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}}
\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Tank\-Drive\-Subsystem}]{\setlength{\rightskip}{0pt plus 5cm}Tank\-Drive\-Subsystem\-::\-Tank\-Drive\-Subsystem (
\begin{DoxyParamCaption}
\item[{{\bf Pid\-Motor\-Controller} \&}]{left\-Motor, }
\item[{{\bf Pid\-Motor\-Controller} \&}]{right\-Motor}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_a8bb3ac4ae73bfcb77bdacb31052b9d09}
Constructs a \hyperlink{class_tank_drive_subsystem}{Tank\-Drive\-Subsystem} with two Pid\-Encoder\-Motor\-Controllers. \hypertarget{class_tank_drive_subsystem_a7a5ed0dc2d14b7d96e1c827c3a536eba}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}}
\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Tank\-Drive\-Subsystem}]{\setlength{\rightskip}{0pt plus 5cm}Tank\-Drive\-Subsystem\-::\-Tank\-Drive\-Subsystem (
\begin{DoxyParamCaption}
\item[{boost\-::shared\-\_\-ptr$<$ C\-A\-N\-Jaguar $>$}]{left\-Front\-Motor, }
\item[{boost\-::shared\-\_\-ptr$<$ C\-A\-N\-Jaguar $>$}]{left\-Back\-Motor, }
\item[{boost\-::shared\-\_\-ptr$<$ C\-A\-N\-Jaguar $>$}]{right\-Front\-Motor, }
\item[{boost\-::shared\-\_\-ptr$<$ C\-A\-N\-Jaguar $>$}]{right\-Back\-Motor}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_a7a5ed0dc2d14b7d96e1c827c3a536eba}
Constructs a \hyperlink{class_tank_drive_subsystem}{Tank\-Drive\-Subsystem} with four C\-A\-N\-Jaguars. \hypertarget{class_tank_drive_subsystem_a05a431f8f439f308e4676c14411c70cf}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}}
\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Tank\-Drive\-Subsystem}]{\setlength{\rightskip}{0pt plus 5cm}Tank\-Drive\-Subsystem\-::\-Tank\-Drive\-Subsystem (
\begin{DoxyParamCaption}
\item[{boost\-::shared\-\_\-ptr$<$ C\-A\-N\-Jaguar $>$}]{left\-Motor, }
\item[{boost\-::shared\-\_\-ptr$<$ C\-A\-N\-Jaguar $>$}]{right\-Motor}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_a05a431f8f439f308e4676c14411c70cf}
Constructs a \hyperlink{class_tank_drive_subsystem}{Tank\-Drive\-Subsystem} with two C\-A\-N\-Jaguars. \hypertarget{class_tank_drive_subsystem_aaed15564e6d60c0a4133770a5c1d098d}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}}
\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Tank\-Drive\-Subsystem}]{\setlength{\rightskip}{0pt plus 5cm}Tank\-Drive\-Subsystem\-::\-Tank\-Drive\-Subsystem (
\begin{DoxyParamCaption}
\item[{C\-A\-N\-Jaguar $\ast$}]{left\-Front\-Motor, }
\item[{C\-A\-N\-Jaguar $\ast$}]{left\-Back\-Motor, }
\item[{C\-A\-N\-Jaguar $\ast$}]{right\-Front\-Motor, }
\item[{C\-A\-N\-Jaguar $\ast$}]{right\-Back\-Motor, }
\item[{bool}]{can\-Delete\-Motors = {\ttfamily false}}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_aaed15564e6d60c0a4133770a5c1d098d}
Constructs a \hyperlink{class_tank_drive_subsystem}{Tank\-Drive\-Subsystem} with four C\-A\-N\-Jaguars. \hypertarget{class_tank_drive_subsystem_a01f7150cf6fd4cda290ff33f7bf166fc}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}}
\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Tank\-Drive\-Subsystem}]{\setlength{\rightskip}{0pt plus 5cm}Tank\-Drive\-Subsystem\-::\-Tank\-Drive\-Subsystem (
\begin{DoxyParamCaption}
\item[{C\-A\-N\-Jaguar $\ast$}]{left\-Motor, }
\item[{C\-A\-N\-Jaguar $\ast$}]{right\-Motor, }
\item[{bool}]{can\-Delete\-Motors = {\ttfamily false}}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_a01f7150cf6fd4cda290ff33f7bf166fc}
Constructs a \hyperlink{class_tank_drive_subsystem}{Tank\-Drive\-Subsystem} with two C\-A\-N\-Jaguars. \hypertarget{class_tank_drive_subsystem_a8da4ddd63d560f180b6b9ce19dc9de0a}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}}
\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Tank\-Drive\-Subsystem}]{\setlength{\rightskip}{0pt plus 5cm}Tank\-Drive\-Subsystem\-::\-Tank\-Drive\-Subsystem (
\begin{DoxyParamCaption}
\item[{C\-A\-N\-Jaguar \&}]{left\-Front\-Motor, }
\item[{C\-A\-N\-Jaguar \&}]{left\-Back\-Motor, }
\item[{C\-A\-N\-Jaguar \&}]{right\-Front\-Motor, }
\item[{C\-A\-N\-Jaguar \&}]{right\-Back\-Motor}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_a8da4ddd63d560f180b6b9ce19dc9de0a}
Constructs a \hyperlink{class_tank_drive_subsystem}{Tank\-Drive\-Subsystem} with four C\-A\-N\-Jaguars. \hypertarget{class_tank_drive_subsystem_a83ecf54aca8c30faa273c8a73988448c}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}}
\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Tank\-Drive\-Subsystem}]{\setlength{\rightskip}{0pt plus 5cm}Tank\-Drive\-Subsystem\-::\-Tank\-Drive\-Subsystem (
\begin{DoxyParamCaption}
\item[{C\-A\-N\-Jaguar \&}]{left\-Motor, }
\item[{C\-A\-N\-Jaguar \&}]{right\-Motor}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_a83ecf54aca8c30faa273c8a73988448c}
Constructs a \hyperlink{class_tank_drive_subsystem}{Tank\-Drive\-Subsystem} with two C\-A\-N\-Jaguars. \hypertarget{class_tank_drive_subsystem_a8ee157d37267ce8b992f3adc18d4cade}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}}
\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Tank\-Drive\-Subsystem}]{\setlength{\rightskip}{0pt plus 5cm}Tank\-Drive\-Subsystem\-::\-Tank\-Drive\-Subsystem (
\begin{DoxyParamCaption}
\item[{Speed\-Controller $\ast$}]{left\-Front\-Motor, }
\item[{Speed\-Controller $\ast$}]{left\-Back\-Motor, }
\item[{Speed\-Controller $\ast$}]{right\-Front\-Motor, }
\item[{Speed\-Controller $\ast$}]{right\-Back\-Motor}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_a8ee157d37267ce8b992f3adc18d4cade}
Constructs a \hyperlink{class_tank_drive_subsystem}{Tank\-Drive\-Subsystem} with four Speed\-Controllers. \hypertarget{class_tank_drive_subsystem_a899218d5e877cd66b0f9e5c31e97489f}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}}
\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Tank\-Drive\-Subsystem}]{\setlength{\rightskip}{0pt plus 5cm}Tank\-Drive\-Subsystem\-::\-Tank\-Drive\-Subsystem (
\begin{DoxyParamCaption}
\item[{Speed\-Controller $\ast$}]{left\-Motor, }
\item[{Speed\-Controller $\ast$}]{right\-Motor}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_a899218d5e877cd66b0f9e5c31e97489f}
Constructs a \hyperlink{class_tank_drive_subsystem}{Tank\-Drive\-Subsystem} with two Speed\-Controllers. \hypertarget{class_tank_drive_subsystem_af44e553b72f8a2a01fda4e4d561f9a29}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}}
\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Tank\-Drive\-Subsystem}]{\setlength{\rightskip}{0pt plus 5cm}Tank\-Drive\-Subsystem\-::\-Tank\-Drive\-Subsystem (
\begin{DoxyParamCaption}
\item[{Speed\-Controller \&}]{left\-Front\-Motor, }
\item[{Speed\-Controller \&}]{left\-Back\-Motor, }
\item[{Speed\-Controller \&}]{right\-Front\-Motor, }
\item[{Speed\-Controller \&}]{right\-Back\-Motor}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_af44e553b72f8a2a01fda4e4d561f9a29}
Constructs a \hyperlink{class_tank_drive_subsystem}{Tank\-Drive\-Subsystem} with four Speed\-Controllers. \hypertarget{class_tank_drive_subsystem_a61913b7960d71dc73e2887db34bb989f}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}}
\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Tank\-Drive\-Subsystem}]{\setlength{\rightskip}{0pt plus 5cm}Tank\-Drive\-Subsystem\-::\-Tank\-Drive\-Subsystem (
\begin{DoxyParamCaption}
\item[{Speed\-Controller \&}]{left\-Motor, }
\item[{Speed\-Controller \&}]{right\-Motor}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_a61913b7960d71dc73e2887db34bb989f}
Constructs a \hyperlink{class_tank_drive_subsystem}{Tank\-Drive\-Subsystem} with two Speed\-Controllers. 

\subsection{Member Function Documentation}
\hypertarget{class_tank_drive_subsystem_a48329a9c1073f0a59190648b56404918}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Drive\-By\-Magnitude\-And\-Curve@{Drive\-By\-Magnitude\-And\-Curve}}
\index{Drive\-By\-Magnitude\-And\-Curve@{Drive\-By\-Magnitude\-And\-Curve}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Drive\-By\-Magnitude\-And\-Curve}]{\setlength{\rightskip}{0pt plus 5cm}void Tank\-Drive\-Subsystem\-::\-Drive\-By\-Magnitude\-And\-Curve (
\begin{DoxyParamCaption}
\item[{double}]{magnitude, }
\item[{double}]{curve}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_a48329a9c1073f0a59190648b56404918}
Drive the specified magnitude and curve amount.

This function is untested.


\begin{DoxyParams}{Parameters}
{\em magnitude} & The magnitude to drive.  curve the amount to curve. \\
\hline
\end{DoxyParams}
\hypertarget{class_tank_drive_subsystem_a8fd73ce2cc0f6dbb18d1e3a37c34dfde}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Drive\-By\-Tank@{Drive\-By\-Tank}}
\index{Drive\-By\-Tank@{Drive\-By\-Tank}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Drive\-By\-Tank}]{\setlength{\rightskip}{0pt plus 5cm}void Tank\-Drive\-Subsystem\-::\-Drive\-By\-Tank (
\begin{DoxyParamCaption}
\item[{double}]{left\-Value, }
\item[{double}]{right\-Value}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_a8fd73ce2cc0f6dbb18d1e3a37c34dfde}
Drive the specified amount tank style.

This function is untested.


\begin{DoxyParams}{Parameters}
{\em left\-Value} & The amount to drive the left drive motors.  right\-Value The amount to drive the right drive motors. \\
\hline
\end{DoxyParams}
\hypertarget{class_tank_drive_subsystem_a373a676d75a14362bc31fe3d4a17c8a1}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Get\-Control\-Mode@{Get\-Control\-Mode}}
\index{Get\-Control\-Mode@{Get\-Control\-Mode}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Get\-Control\-Mode}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Drive\-Subsystem\-::\-Control\-Mode} Tank\-Drive\-Subsystem\-::\-Get\-Control\-Mode (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_a373a676d75a14362bc31fe3d4a17c8a1}
Gets the current Control\-Mode.

This function is untested. \hypertarget{class_tank_drive_subsystem_ad4a6c1ac368b96b68c9facc346f04591}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Get\-Motor\-Count@{Get\-Motor\-Count}}
\index{Get\-Motor\-Count@{Get\-Motor\-Count}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Get\-Motor\-Count}]{\setlength{\rightskip}{0pt plus 5cm}U\-I\-N\-T32 Tank\-Drive\-Subsystem\-::\-Get\-Motor\-Count (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
) const}}\label{class_tank_drive_subsystem_ad4a6c1ac368b96b68c9facc346f04591}
Gets the number of drive motors used. \hypertarget{class_tank_drive_subsystem_af2b671ced4e49909c19d13eaebf98b90}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Get\-Motor\-Invertation@{Get\-Motor\-Invertation}}
\index{Get\-Motor\-Invertation@{Get\-Motor\-Invertation}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Get\-Motor\-Invertation}]{\setlength{\rightskip}{0pt plus 5cm}bool Tank\-Drive\-Subsystem\-::\-Get\-Motor\-Invertation (
\begin{DoxyParamCaption}
\item[{{\bf Tank\-Drive\-Subsystem\-::\-Motor\-Position}}]{position}
\end{DoxyParamCaption}
) const}}\label{class_tank_drive_subsystem_af2b671ced4e49909c19d13eaebf98b90}
Sets the Neutral\-Mode.

Currently only works if C\-A\-N\-Jaguars are used. If C\-A\-N\-Jaguars aren't being used, an exception will be thrown.

This function is untested.


\begin{DoxyParams}{Parameters}
{\em neutral\-Mode} & The Neutral\-Mode to switch to. \\
\hline
\end{DoxyParams}
\hypertarget{class_tank_drive_subsystem_ad2031041d42501363b411ed3a5ac147d}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Get\-Motor\-Rank\-Count@{Get\-Motor\-Rank\-Count}}
\index{Get\-Motor\-Rank\-Count@{Get\-Motor\-Rank\-Count}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Get\-Motor\-Rank\-Count}]{\setlength{\rightskip}{0pt plus 5cm}U\-I\-N\-T32 Tank\-Drive\-Subsystem\-::\-Get\-Motor\-Rank\-Count (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
) const}}\label{class_tank_drive_subsystem_ad2031041d42501363b411ed3a5ac147d}
Gets the number of drive motor ranks (or left motor/right motor pairs) used. \hypertarget{class_tank_drive_subsystem_ae91788bb584fba841a4322e4ab533303}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Handle\-Awake@{Handle\-Awake}}
\index{Handle\-Awake@{Handle\-Awake}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Handle\-Awake}]{\setlength{\rightskip}{0pt plus 5cm}void Tank\-Drive\-Subsystem\-::\-Handle\-Awake (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [virtual]}}}\label{class_tank_drive_subsystem_ae91788bb584fba841a4322e4ab533303}
This function should be overridden to handle the subsystem awakening (when Awake function is called). 

Reimplemented from \hyperlink{class_robot_subsystem_a5e7a5b4382c3c6e8c0ead39f8fbed87d}{Robot\-Subsystem}.

\hypertarget{class_tank_drive_subsystem_ab834b550c5bc2aa5ea164201287a3ebf}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Handle\-Periodic@{Handle\-Periodic}}
\index{Handle\-Periodic@{Handle\-Periodic}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Handle\-Periodic}]{\setlength{\rightskip}{0pt plus 5cm}void Tank\-Drive\-Subsystem\-::\-Handle\-Periodic (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [virtual]}}}\label{class_tank_drive_subsystem_ab834b550c5bc2aa5ea164201287a3ebf}
This function should be overridden to handle periodic subsystem tasks. It will be called periodically when subsystem is added to robot. 

Reimplemented from \hyperlink{class_robot_subsystem_a7066b5d072b9ff707aabad9c46fcdc55}{Robot\-Subsystem}.



Reimplemented in \hyperlink{class_mecanum_drive_subsystem_adf2c3d907fc8271f70dee8eb3be2576f}{Mecanum\-Drive\-Subsystem}.

\hypertarget{class_tank_drive_subsystem_a55532e7537d8f4aa680499fd84483ab7}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Handle\-Stop@{Handle\-Stop}}
\index{Handle\-Stop@{Handle\-Stop}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Handle\-Stop}]{\setlength{\rightskip}{0pt plus 5cm}void Tank\-Drive\-Subsystem\-::\-Handle\-Stop (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [protected]}, {\ttfamily [virtual]}}}\label{class_tank_drive_subsystem_a55532e7537d8f4aa680499fd84483ab7}
This function must be overridden to disable this subsystem.

It must be implimented such that\-:
\begin{DoxyItemize}
\item All contained actuators will stop.
\item The subsystem can be stopped again even after it has been stopped.
\item Actuators will stay powerless until an Action function (a public function) has been called.
\item If the subsystem has already been stopped and an Action function has not been called, stopping the subsystem will not result in powered actuator activity. 
\end{DoxyItemize}

Implements \hyperlink{class_robot_subsystem_a27e1d6644dbf38a6a056abafa08980e8}{Robot\-Subsystem}.

\hypertarget{class_tank_drive_subsystem_a036170bbfff7c4c27fd6402bd55d3350}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Set\-Control\-Mode@{Set\-Control\-Mode}}
\index{Set\-Control\-Mode@{Set\-Control\-Mode}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Set\-Control\-Mode}]{\setlength{\rightskip}{0pt plus 5cm}void Tank\-Drive\-Subsystem\-::\-Set\-Control\-Mode (
\begin{DoxyParamCaption}
\item[{{\bf Control\-Mode}}]{control\-Mode}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_a036170bbfff7c4c27fd6402bd55d3350}
Sets the Control\-Mode.

Except for Percent\-V\-Bus, all other modes will only work if Pid\-Encoder\-Motor\-Controllers are used. An exception will be thrown if a mode other than Percent\-V\-Bus is set without Pid\-Encoder\-Motor\-Controllers. The Pid\-Encoder\-Motor\-Controllers passed to this subsystem may not be able to support every mode usable by this function.

This function seems to work to the extent that it doesn't crash if used properly.


\begin{DoxyParams}{Parameters}
{\em control\-Mode} & The Control\-Mode to switch to. \\
\hline
\end{DoxyParams}
\hypertarget{class_tank_drive_subsystem_a5148286a13682a83196a1b725361639e}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Set\-Encoder\-Codes\-Per\-Revolution@{Set\-Encoder\-Codes\-Per\-Revolution}}
\index{Set\-Encoder\-Codes\-Per\-Revolution@{Set\-Encoder\-Codes\-Per\-Revolution}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Set\-Encoder\-Codes\-Per\-Revolution}]{\setlength{\rightskip}{0pt plus 5cm}void Tank\-Drive\-Subsystem\-::\-Set\-Encoder\-Codes\-Per\-Revolution (
\begin{DoxyParamCaption}
\item[{{\bf Motor\-Position}}]{motor\-Position, }
\item[{U\-I\-N\-T16}]{codes\-Per\-Revolution}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_a5148286a13682a83196a1b725361639e}
Sets the encoder codes per revolution on the specified motor.

This function seems to work.


\begin{DoxyParams}{Parameters}
{\em motor\-Position} & The specified \hyperlink{struct_tank_drive_subsystem_1_1_motor_position}{Motor\-Position} of the motor. \\
\hline
{\em codes\-Per\-Revolution} & The specified encoder codes per revolution of the specified motor. \\
\hline
\end{DoxyParams}
\hypertarget{class_tank_drive_subsystem_aa9dd8286531be9c8aebd74bf20effea5}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Set\-Encoders\-Codes\-Per\-Revolution@{Set\-Encoders\-Codes\-Per\-Revolution}}
\index{Set\-Encoders\-Codes\-Per\-Revolution@{Set\-Encoders\-Codes\-Per\-Revolution}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Set\-Encoders\-Codes\-Per\-Revolution}]{\setlength{\rightskip}{0pt plus 5cm}void Tank\-Drive\-Subsystem\-::\-Set\-Encoders\-Codes\-Per\-Revolution (
\begin{DoxyParamCaption}
\item[{U\-I\-N\-T16}]{code\-Per\-Revolution}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_aa9dd8286531be9c8aebd74bf20effea5}
Sets the encoder codes per revolution.

This function is untested.


\begin{DoxyParams}{Parameters}
{\em code\-Per\-Revolution} & The specified encoder codes per revolution of all of the drive motors. \\
\hline
\end{DoxyParams}
\hypertarget{class_tank_drive_subsystem_ab4f06a60c711464a175f1d82a828b13b}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Set\-Encoders\-Codes\-Per\-Revolution@{Set\-Encoders\-Codes\-Per\-Revolution}}
\index{Set\-Encoders\-Codes\-Per\-Revolution@{Set\-Encoders\-Codes\-Per\-Revolution}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Set\-Encoders\-Codes\-Per\-Revolution}]{\setlength{\rightskip}{0pt plus 5cm}void Tank\-Drive\-Subsystem\-::\-Set\-Encoders\-Codes\-Per\-Revolution (
\begin{DoxyParamCaption}
\item[{U\-I\-N\-T16}]{left\-Front\-Codes\-Per\-Revolution, }
\item[{U\-I\-N\-T16}]{left\-Back\-Codes\-Per\-Revolution, }
\item[{U\-I\-N\-T16}]{right\-Front\-Codes\-Per\-Revolution, }
\item[{U\-I\-N\-T16}]{right\-Back\-Codes\-Per\-Revolution}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_ab4f06a60c711464a175f1d82a828b13b}
Sets the encoder codes per revolution on each of the motors.

This function is untested.


\begin{DoxyParams}{Parameters}
{\em left\-Front\-Codes\-Per\-Revolution} & The specified encoder codes per revolution of the left front motor. \\
\hline
{\em left\-Back\-Codes\-Per\-Revolution} & The specified encoder codes per revolution of the left back motor. \\
\hline
{\em right\-Front\-Codes\-Per\-Revolution} & The specified encoder codes per revolution of the right front motor. \\
\hline
{\em right\-Back\-Codes\-Per\-Revolution} & The specified encoder codes per revolution of the right back motor. \\
\hline
\end{DoxyParams}
\hypertarget{class_tank_drive_subsystem_ae234f352cd4dd1b4f2c1f1fc47f1c3bf}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Set\-Maximum\-Output@{Set\-Maximum\-Output}}
\index{Set\-Maximum\-Output@{Set\-Maximum\-Output}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Set\-Maximum\-Output}]{\setlength{\rightskip}{0pt plus 5cm}void Tank\-Drive\-Subsystem\-::\-Set\-Maximum\-Output (
\begin{DoxyParamCaption}
\item[{double}]{maximum\-Output}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [protected]}}}\label{class_tank_drive_subsystem_ae234f352cd4dd1b4f2c1f1fc47f1c3bf}
Sets the maximum output of the drive system.

This function seems to work.


\begin{DoxyParams}{Parameters}
{\em maximum\-Output} & The desired maximum output. \\
\hline
\end{DoxyParams}
\hypertarget{class_tank_drive_subsystem_a371ce69e5f9260fc53f30f582e41d2cf}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Set\-Motor\-Invertation@{Set\-Motor\-Invertation}}
\index{Set\-Motor\-Invertation@{Set\-Motor\-Invertation}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Set\-Motor\-Invertation}]{\setlength{\rightskip}{0pt plus 5cm}void Tank\-Drive\-Subsystem\-::\-Set\-Motor\-Invertation (
\begin{DoxyParamCaption}
\item[{{\bf Motor\-Position}}]{motor\-Position, }
\item[{bool}]{is\-Inverted}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_a371ce69e5f9260fc53f30f582e41d2cf}
Sets the motor invertation of the motor at the specified \hyperlink{struct_tank_drive_subsystem_1_1_motor_position}{Motor\-Position}.

This function seems to work.


\begin{DoxyParams}{Parameters}
{\em motor\-Position} & The specified \hyperlink{struct_tank_drive_subsystem_1_1_motor_position}{Motor\-Position} of the motor to be inverted or uninverted. \\
\hline
{\em is\-Inverted} & The desired invertation of the specified motor. \\
\hline
\end{DoxyParams}
\hypertarget{class_tank_drive_subsystem_a47d76a87016c06faa71a326c0c644ff5}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Set\-Motor\-Invertations@{Set\-Motor\-Invertations}}
\index{Set\-Motor\-Invertations@{Set\-Motor\-Invertations}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Set\-Motor\-Invertations}]{\setlength{\rightskip}{0pt plus 5cm}void Tank\-Drive\-Subsystem\-::\-Set\-Motor\-Invertations (
\begin{DoxyParamCaption}
\item[{bool}]{left\-Front\-Is\-Inverted, }
\item[{bool}]{left\-Back\-Is\-Inverted, }
\item[{bool}]{right\-Front\-Is\-Inverted, }
\item[{bool}]{right\-Back\-Is\-Inverted}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_a47d76a87016c06faa71a326c0c644ff5}
Sets the motor invertations.

This function is untested.


\begin{DoxyParams}{Parameters}
{\em left\-Front\-Is\-Inverted} & The desired invertation of the left front motor. \\
\hline
{\em left\-Back\-Is\-Inverted} & The desired invertation of the left back motor. \\
\hline
{\em right\-Front\-Is\-Inverted} & The desired invertation of the right front motor. \\
\hline
{\em right\-Back\-Is\-Inverted} & The desired invertation of the right back motor. \\
\hline
\end{DoxyParams}
\hypertarget{class_tank_drive_subsystem_ac594f9e16f238b40d7d855f895d9bcae}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Set\-Motor\-Invertations@{Set\-Motor\-Invertations}}
\index{Set\-Motor\-Invertations@{Set\-Motor\-Invertations}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Set\-Motor\-Invertations}]{\setlength{\rightskip}{0pt plus 5cm}void Tank\-Drive\-Subsystem\-::\-Set\-Motor\-Invertations (
\begin{DoxyParamCaption}
\item[{bool}]{left\-Is\-Inverted, }
\item[{bool}]{right\-Is\-Inverted}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_ac594f9e16f238b40d7d855f895d9bcae}
Sets the motor invertations.

This function is untested.


\begin{DoxyParams}{Parameters}
{\em left\-Is\-Inverted} & The desired invertation of the left motors. \\
\hline
{\em right\-Is\-Inverted} & The desired invertation of the right motors. \\
\hline
\end{DoxyParams}
\hypertarget{class_tank_drive_subsystem_ade9984aff56419959bec12bcaca45de5}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Set\-P\-I\-D@{Set\-P\-I\-D}}
\index{Set\-P\-I\-D@{Set\-P\-I\-D}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Set\-P\-I\-D}]{\setlength{\rightskip}{0pt plus 5cm}void Tank\-Drive\-Subsystem\-::\-Set\-P\-I\-D (
\begin{DoxyParamCaption}
\item[{{\bf Control\-Mode}}]{control\-Mode, }
\item[{{\bf Motor\-Position}}]{motor\-Position, }
\item[{double}]{p, }
\item[{double}]{i, }
\item[{double}]{d}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_ade9984aff56419959bec12bcaca45de5}
Sets the P\-I\-D values of the specified drive motor when in speed control mode.

This function is only supported when using Pid\-Encoder\-Motor\-Controllers. If Pid\-Encoder\-Motor\-Controllers aren't being used, an exception will be thrown.

This function seems to work.


\begin{DoxyParams}{Parameters}
{\em motor\-Position} & The specified \hyperlink{struct_tank_drive_subsystem_1_1_motor_position}{Motor\-Position}. \\
\hline
{\em p} & The desired Proportional gain. \\
\hline
{\em i} & The desired Intregral gain. \\
\hline
{\em d} & The desired Differential gain. \\
\hline
\end{DoxyParams}
\hypertarget{class_tank_drive_subsystem_a0e963323135db309d6584387ad5387a8}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Set\-P\-I\-Ds@{Set\-P\-I\-Ds}}
\index{Set\-P\-I\-Ds@{Set\-P\-I\-Ds}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Set\-P\-I\-Ds}]{\setlength{\rightskip}{0pt plus 5cm}void Tank\-Drive\-Subsystem\-::\-Set\-P\-I\-Ds (
\begin{DoxyParamCaption}
\item[{{\bf Control\-Mode}}]{control\-Mode, }
\item[{double}]{p, }
\item[{double}]{i, }
\item[{double}]{d}
\end{DoxyParamCaption}
)}}\label{class_tank_drive_subsystem_a0e963323135db309d6584387ad5387a8}
Sets the P\-I\-D values of each of the motors when in speed control mode.

This function is only supported when using Pid\-Encoder\-Motor\-Controllers. If Pid\-Encoder\-Motor\-Controllers aren't being used, an exception will be thrown.

This function is untested.


\begin{DoxyParams}{Parameters}
{\em p} & The desired Proportional gain. \\
\hline
{\em i} & The desired Intregral gain. \\
\hline
{\em d} & The desired Differential gain. \\
\hline
\end{DoxyParams}
\hypertarget{class_tank_drive_subsystem_a94519a782cffefc8d72482c353508586}{\index{Tank\-Drive\-Subsystem@{Tank\-Drive\-Subsystem}!Tank\-Drive\-Fetch\-Value@{Tank\-Drive\-Fetch\-Value}}
\index{Tank\-Drive\-Fetch\-Value@{Tank\-Drive\-Fetch\-Value}!TankDriveSubsystem@{Tank\-Drive\-Subsystem}}
\subsubsection[{Tank\-Drive\-Fetch\-Value}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Tank\-Value} Tank\-Drive\-Subsystem\-::\-Tank\-Drive\-Fetch\-Value (
\begin{DoxyParamCaption}
\item[{Generic\-H\-I\-D \&}]{left\-Joystick, }
\item[{Generic\-H\-I\-D \&}]{right\-Joystick}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [static]}}}\label{class_tank_drive_subsystem_a94519a782cffefc8d72482c353508586}
Constructs a \hyperlink{class_tank_drive_subsystem}{Tank\-Drive\-Subsystem} with four motors. 

The documentation for this class was generated from the following files\-:\begin{DoxyCompactItemize}
\item 
C\-:/\-Users/\-Sam/\-Projects/\-F\-R\-C/\-Libraries/\-Fpk/\-Entech-\/\-Fpk-\/\-Subscribers/\-Entech-\/\-Fpk/\-Subsystems/Tank\-Drive\-Subsystem.\-hpp\item 
C\-:/\-Users/\-Sam/\-Projects/\-F\-R\-C/\-Libraries/\-Fpk/\-Entech-\/\-Fpk-\/\-Subscribers/\-Entech-\/\-Fpk/\-Subsystems/Tank\-Drive\-Subsystem.\-cpp\end{DoxyCompactItemize}
